"""
网络搜索功能接口
支持LLM进行互联网搜索
"""
from typing import Dict, Any, List, Optional, Set, ClassVar
import json
from .base import Capability, register_capability

@register_capability("web_search")
class WebSearchCapability(Capability):
	"""网络搜索功能组件接口"""
	
	# 依赖的能力
	dependencies: ClassVar[Set[str]] = set(["tool_calls"])
	
	def _initialize(self) -> None:
		"""初始化搜索功能"""
		super()._initialize()
		# 检查配置中是否启用了搜索
		self.search_enabled = self.provider.config.get("search", False)
	
	def is_supported(self) -> bool:
		"""
		检查是否支持网络搜索
		
		Returns:
			是否支持网络搜索
		"""
		# 首先检查是否启用了搜索功能
		if not self.search_enabled:
			return False
			
		# 然后检查依赖的能力是否可用
		for dep in self.dependencies:
			if not self.provider.has_capability(dep):
				return False
				
		return True
		
	def prepare_search_tools(self) -> List[Dict[str, Any]]:
		"""
		准备搜索工具定义
		
		Returns:
			搜索工具定义列表
		"""
		raise NotImplementedError("必须由具体实现类实现")
	
	def execute_search(self, query: str) -> Dict[str, Any]:
		"""
		执行网络搜索
		
		Args:
			query: 搜索查询
			
		Returns:
			搜索结果
		"""
		raise NotImplementedError("必须由具体实现类实现")
		
	def handle_search_result(self, result: Dict[str, Any]) -> str:
		"""
		处理搜索结果
		
		Args:
			result: 搜索结果
			
		Returns:
			处理后的结果字符串
		"""
		raise NotImplementedError("必须由具体实现类实现")
		
	def format_tool_response(self, tool_call_id: str, result: Dict[str, Any]) -> Dict[str, Any]:
		"""
		格式化工具响应消息
		
		Args:
			tool_call_id: 工具调用ID
			result: 搜索结果
			
		Returns:
			格式化的响应消息
		"""
		raise NotImplementedError("必须由具体实现类实现")
